﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace Common.File
{
    public class FileMessage
    {
        public string name = String.Empty;                //获取文件名称
        public string fullName = String.Empty;           //获取文件的完整目录
        public string strDName = String.Empty;         //获取文件的完整路径
        public string creationTime = String.Empty;     //获取文件创建时间
        public string strLATime = String.Empty;        //获取上次访问该文件的时间
        public string strLWTime = String.Empty;       //获取上次写入文件的时间
        public string strISRead = String.Empty;          //获取文件是否只读
        public long lgLength = 0;             //获取文件长度
    }

    class FileSelect
    {

        /**
         * \brief 查找指定目录下的所有子目录及文件类型
         * 
         * \param[in] selectedPath 指定路径
         * \retval 文件参数列表
         */
        public static List<FileMessage> FindAllFile(string selectedPath)
        {
            List<FileMessage> fileMessageList = new List<FileMessage>();
            //实例化DirectoryInfo对象
            DirectoryInfo dinfo = new DirectoryInfo(selectedPath);
            //获取指定目录下的所有子目录及文件类型
            FileSystemInfo[] fsinfos = dinfo.GetFileSystemInfos();
            foreach (FileSystemInfo fsinfo in fsinfos)
            {
                if (fsinfo is DirectoryInfo)    //判断是否文件夹
                {
                    //使用获取的文件夹名称实例化DirectoryInfo对象
                    DirectoryInfo dirinfo = new DirectoryInfo(fsinfo.FullName);
                    //为列表添加文件夹信息
                    FileMessage fileMessage = new FileMessage() 
                    {
                        name = dirinfo.Name, 
                        fullName = dirinfo.FullName,
                        creationTime = dirinfo.CreationTime.ToShortDateString(),
                        strLATime = dirinfo.LastAccessTime.ToShortDateString(),//获取上次访问该文件的时间
                        strLWTime = dirinfo.LastWriteTime.ToShortDateString(),//获取上次写入文件的时间
                    };
                    fileMessageList.Add(fileMessage);
                }
                else
                {
                    //使用获取的文件名称实例化FileInfo对象
                    FileInfo finfo = new FileInfo(fsinfo.FullName);
                    //为列表添加文件夹信息
                    FileMessage fileMessage = new FileMessage()
                    { 
                        name = finfo.Name, 
                        fullName = finfo.FullName,
                        strDName = finfo.DirectoryName,                                  //获取文件的完整路径
                        creationTime = finfo.CreationTime.ToShortDateString(),
                        strLATime = finfo.LastAccessTime.ToShortDateString(),//获取上次访问该文件的时间
                        strLWTime = finfo.LastWriteTime.ToShortDateString(),  //获取上次写入文件的时间
                        strISRead = finfo.IsReadOnly.ToString(),                         //获取文件是否只读
                        lgLength = finfo.Length                                                  //获取文件长度
                    };
                    fileMessageList.Add(fileMessage);
                }
            }
            return fileMessageList;
        }
    }
}
